lexer grammar CLexer;

options {
  language = Java;
}

@header {
  package practpl.diez;
}

@members{

    private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
    public ArrayList<RecognitionException> getErrors() {
       return errors;
    }
    @Override
    public void reportError (RecognitionException e) {
       String msg = getErrorMessage(e, getTokenNames());
       System.err.println(msg);
       errors.add(e);
    }   
     
}

WHILE: 'while';
IF: 'if';
ELSE: 'else';
BREAK: 'break';
VOID: 'void';
INT: 'int';

BLANCO : (' '|'\t'|'\r\n') {skip();};

fragment LETRA : ('a'..'z')| ('A'..'Z');
CHAR: '\'' (LETRA | DIGITO) '\'';
IDENT: (LETRA)+;
TEXTO: '\"' (.)* '\"';

fragment DIGITO : '0'..'9';
NUMERO : (DIGITO)+;
FLOAT : (DIGITO)+'.'(DIGITO)+;

MAS: '+';
MENOS: '-';
MULT: '*';
DIV: '/';
IGUAL: '=';
MENORIGUAL: '<=';
MAYORIGUAL: '>=';
COMPARA: '==';
DISTINTO: '!=';
MENOR: '<';
MAYOR: '>';

PARENTA: '(';
PARENTC: ')';
LLAVEA: '{';
LLAVEC: '}';
SEPARADOR : ';' ;
DOSPUNTOS: ':';
COMA: ',';
ASIGNA : ':=';
QUESTION : '?';

COMENTARIO: ('/*' ( options {greedy=false;} : . )* '*/') {skip();};
